目录
  1. 1. Command Injection 原理分析及利用
    1. 1.1. 命令注入中常使用的参数
    2. 1.2. DVWA Command Injection 模块代码分析
    3. 1.3. 渗透中Command Injection 利用思路
    4. 1.4. Command Injection 防范
Command Injection 原理分析及利用

Command Injection 原理分析及利用

有些应用中,可能允许使用者向后台操作系统发送命令并执行,例如测试同网站的连接(ping命令),这种功能一般通过如PHP中的exec、shell_exec和ASP中的wscript.shell等函数实现。命令注入(command injection)漏洞指的是在这些功能中,由于对操作者的输入或返回的输出结果控制不严导致能够让恶意操作者利用管道符等将恶意系统命令拼接在正常命令之后并执行拿到输出结果。

命令注入中常使用的参数

命令注入中常使用的参数有:&&、&、|、||、;、%0a(换行符的URL编码)及反引号。区别有:

符号 命令形式 执行结果
&& command1 && command2 先执行command1,如果为真,再执行command2
& command1 & command2 command1与command2同时执行,不管command 1是否执行成功
|| command1 || command2 先执行command1,如果为假,再执行command2
| command1 | command2 只执行command2
; command1 ; command2 先执行command1,后执行command2

DVWA Command Injection 模块代码分析

下图为DVWA中Command Injection模块Low级别的源码。可以看到代码中监听到用户提交命令后,先判断其操作系统类型,随后拼接用户输入的ip地址并执行ping命令,可以看到没有对该输入做任务处理,存在严重的命令执行漏洞。可以利用‘127.0.0.1 && net user’等命令进行验证该漏洞。
DVWA Low级别命令注入源码事实上,在Medium和High难度中均尝试通过加入黑名单的方式防御命令注入攻击,如过滤&&、||符号等,但由于黑名单不全导致仍然可被利用。
DVWA Medium级别命令注入源码
DVWA High级别命令注入源码

渗透中Command Injection 利用思路

如果发现应用中存在该漏洞,以本人目前的学识认为利用方法之一就是通过添加账户来远程登录主机并进行下一步的渗透,这里以Windows操作系统来作说明。
首先通过nmap扫描其是否开放3389等敏感端口,如果未开放,使用’REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal” “Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f’命令开启3389端口及服务。随后尝试使用在命令后拼接’net user xxx xxx/add’添加新用户,并通过’net localgroup administrations xxx/add’将该用户添加进administration用户组。最后使用mstsc命令打开远程桌面连接输入ip地址和刚刚添加进的用户名及密码,随后便可通过远程连接登录目标主机实施操作。

Command Injection 防范

在应用中应当尽量避免直接调用操作系统命令,对于无法避免的场景,应当考虑建立白名单机制,严格限制用户的输入。正如下面Impossible级别源码中处理的那样,通过判断用户输入的每一位是否为整数来在满足查询命令需要的同时避免命令注入漏洞。
DVWA Impossible级别命令注入源码

文章作者: Zhaoyh
文章链接: https://zhaoyh222.github.io/2019/10/20/Command Injection/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zhaoyh's blog
打赏
  • 微信
  • 支付宝